
//200.岛屿数量
class Solution {
public:
    int numIslands(vector<vector<char>>& grid) {
        int n=grid.size(),m=grid[0].size();
        int dx[]={-1,1,0,0};  //向左右进行扩展
        int dy[]={0,0,1,-1};   //上下进行扩展
        function<void(int,int)> dfs=[&](int x,int y)   //进行递归调用,向左右进行扩展
        {
            grid[x][y]='0';    //将同一个区域的1全部置为0
            for(int k=0;k<4;k++)
            {
                int a=x+dx[k];
                int b=y+dy[k];
                if(a>=0&&a<n&&b>=0&&b<m&&grid[a][b]=='1') dfs(a,b);
            }
        };
        int ret=0;
        for(int i=0;i<n;i++)  //依次遍历
        {
            for(int j=0;j<m;j++)
            {
                if(grid[i][j]=='1') 
                {
                    ret++;
                    dfs(i,j);
                }
            }
        }
        return ret;
    }
};